<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" >

<title>开源协议 | 跬步</title>
<meta name="description" content="不积跬步，无以至千里">

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<link rel="shortcut icon" href="https://skylaugh.gitee.io/blog/favicon.ico?v=1698591240151">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css">
<link rel="stylesheet" href="https://skylaugh.gitee.io/blog/styles/main.css">



<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.bootcss.com/highlight.js/9.12.0/highlight.min.js"></script>

<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />



  </head>
  <body>
    <div id="app" class="main">

      <div class="sidebar" :class="{ 'full-height': menuVisible }">
  <div class="top-container" data-aos="fade-right">
    <div class="top-header-container">
      <a class="site-title-container" href="https://skylaugh.gitee.io/blog">
        <img src="https://skylaugh.gitee.io/blog/images/avatar.png?v=1698591240151" class="site-logo">
        <h1 class="site-title">跬步</h1>
      </a>
      <div class="menu-btn" @click="menuVisible = !menuVisible">
        <div class="line"></div>
      </div>
    </div>
    <div>
      
        
          <a href="/blog/archives" class="site-nav">
            归档
          </a>
        
      
        
          <a href="/blog/tags" class="site-nav">
            标签
          </a>
        
      
        
          <a href="/blog/post/about" class="site-nav">
            关于
          </a>
        
      
    </div>
  </div>
  <div class="bottom-container" data-aos="flip-up" data-aos-offset="0">
    <div class="social-container">
      
        
      
        
      
        
      
        
      
        
      
    </div>
    <div class="site-description">
      不积跬步，无以至千里
    </div>
    <div class="site-footer">
      <a href="mailto:skylaugh@foxmail.com">Email</a> | <a class="rss" href="https://skylaugh.gitee.io/blog/atom.xml" target="_blank">RSS</a>
    </div>
  </div>
</div>


      <div class="main-container">
        <div class="content-container" data-aos="fade-up">
          <div class="post-detail">
            <h2 class="post-title">开源协议</h2>
            <div class="post-date">2023-06-19</div>
            
              <div class="feature-container" style="background-image: url('https://skylaugh.gitee.io/blog/post-images/kai-yuan-xie-yi.jpg')">
              </div>
            
            <div class="post-content">
              <p>之前只知道项目有开源和闭源之分，但是却不懂项目开源协议有哪些不同，看着项目从这个协议变更到那个协议，对于其中的变化也是不以为意。这次就来详细了解一下，看看不同的开源协议各自有什么特点。</p>
<h3 id="apache-license">Apache License</h3>
<ul>
<li>需要给代码的用户一份 Apache License</li>
<li>如果修改了代码，需要在被修改的文件中说明</li>
<li>在衍生的代码中需要带有原来代码中的协议，商标，专利声明和其他原来作者规定需要包含的说明。</li>
<li>如果在发布的产品中包含一个Notice文件，则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可，但是不可以表现为对Apache Licence构成更改。</li>
<li>Apache Licence 也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足并作为商业产品发布/销售。</li>
</ul>
<h5 id="使用这个协议的好处有">使用这个协议的好处有：</h5>
<ul>
<li>永久权利。一旦被授权，永久拥有。</li>
<li>全球范围的权利。在一个国家得到授权，适用于所有国家。假如你在美国，许可是从印度授权的，也没有问题。</li>
<li>授权免费。务办税，前期、后期均无任何费用。</li>
<li>授权无排他性。任何人都可以获得授权。</li>
<li>授权不可撤销。一旦获得授权，没有任何人可以取消。比如，你基于该产品开发了衍生产品，不用担心会在某一天会被禁止试用该代码。</li>
</ul>
<h3 id="bsd">BSD</h3>
<p>&quot;Berkeley Software Distribution&quot;的缩写，意思是“伯克利软件发行版”。<br>
BSD开源协议：是一个基于使用者很大自由的协议。可以自由的使用，修改源代码，也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码，或者以BSD协议代码作为基础做二次开发自己的产品时，需要满足三个条件：</p>
<ol>
<li>如果发布的产品中包含有BSD协议的代码，则必须带有BSD协议。</li>
<li>如果再发布的只是二级制类库/软件，则需要在类库/软件的文档和版权声明中包含原来代码中BSD协议。</li>
<li>不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。<br>
BSD代码鼓励代码共享，但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码，也允许使用或在在BSD代码上开发软件发布或销售，对商业集成是很友好的协议。很多公司选用开源产品的时候首选BSD协议，因为可以完全控制这些第三方的代码，必要的时候可以修改或者二次开发。</li>
</ol>
<h3 id="gpl">GPL</h3>
<p>GNU General Public Licence: GNU通用公共许可协议<br>
Linux采用了GPL<br>
GPL允许代码以及衍生代码的免费试用和引用/修改。但不允许修改后和衍生的代码作为闭源商业软件发布和销售。所以我们用的Linux都是免费的。</p>
<h3 id="lgpl">LGPL</h3>
<p>LGPL是GPL的一个为主要类库试用设计的开源协议。和GPL不用的是，LGPL允许商业软件通过类库引用的方式使用LGPL类库而不需要开源商业软甲你的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用发布和销售。</p>
<h3 id="mit">MIT</h3>
<p>MIT适合BSD一样宽泛的许可协议，源自麻省理工学院，又称X11协议。作者只想保留版权，而无任何其他的限制。MIT是目前限制最少的协议。这个协议唯一的条件就是在修改后的代码或者发行包包含原作者的许可信息。适用商业软件。适用MIT的软件项目有：jquery，node.js.</p>
<h3 id="mpl">MPL</h3>
<p>MPL协议允许免费重发布，免费修改。但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益。它要求基于这种软件的修改无偿贡献版权给该软件。这样，围绕该软件的所有代码的版权都集中在始作俑者手中。但MPL是允许修改，无偿试用的。</p>
<h3 id="epl">EPL</h3>
<p>EPL允许代码使用、复制、分发、传播、展示以及修改后闭源二次商业发布。<br>
使用EPL协议，需要遵守以下规则：</p>
<ul>
<li>当一个二次开发者将源码整体或者部分再次开源发布时，必须要继续遵守EPL开源协议来发布，而不能改用其他歇息发布，除非得到源码拥有者的授权。</li>
<li>EPL协议下，你可以将远吗不做任何修改来商业发布，但如果你要发布修改后的源码，必须声明它的源码是可以获取的，且要告知获取方法。</li>
<li>当你需要将EPL下的源码作为一部分跟其他私有源码混合一起作为产品发布的时候，你可以将整个产品以私人的协议发布，但要声明哪一部分代码是EPL协议下的，而且那部分代码继续遵循EPL协议。</li>
<li>独立的模块，不需要开源？</li>
</ul>
<h3 id="creative-commons知识共享协议">Creative Commons知识共享协议</h3>
<p>Creative Commons（CC）许可协议并不能说是真正意义上的开源协议，它们大多被用于设计类的工程上。CC协议种类繁多，每一种都授权特定的权利。一个CC许可协议具有四个基本部分，这几个部分可以单独起作用，也可以组合起来。下面是这几部分的简介：</p>
<ol>
<li>署名。作品上必须附有作品的归属。</li>
<li>相同方式共享。衍生品也必须是CC协议。</li>
<li>非商业用途。衍生品不能用于商业目的。</li>
<li>禁止衍生作品。</li>
</ol>

            </div>
            
              <div class="tag-container">
                
                  <a href="https://skylaugh.gitee.io/blog/tag/tUCgTF6zk/" class="tag">
                    Others
                  </a>
                
              </div>
            
            
              <div class="next-post">
                <div class="next">下一篇</div>
                <a href="https://skylaugh.gitee.io/blog/post/dockerfile-ru-he-bian-xie/">
                  <h3 class="post-title">
                    Dockerfile 如何编写
                  </h3>
                </a>
              </div>
            

            

          </div>

        </div>
      </div>
    </div>

    <script src="https://unpkg.com/aos@next/dist/aos.js"></script>

<script type="application/javascript">

AOS.init();

hljs.initHighlightingOnLoad()

var app = new Vue({
  el: '#app',
  data: {
    menuVisible: false,
  },
})

</script>




  </body>
</html>
